package javacommon.util;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ArrayUtils;

/**
 * 文件操作工具类
 * @author 郑未 20140715
 *
 */
public class FileUtils {
    /**
     * 获得前缀,aaa.txt-->aaa
     * 
     * @param fileName
     * @return
     */
    public static String getFilePrefix(String fileName) {
        int splitIndex = fileName.lastIndexOf(".");
        return fileName.substring(0, splitIndex);
    }

    /**
     * 获得后缀,aaa.txt-->txt
     * 
     * @param fileName
     * @return
     */
    public static String getFileSufix(String fileName) {
        int splitIndex = fileName.lastIndexOf(".");
        return fileName.substring(splitIndex + 1);
    }

    /**
     * Description: <br> 1、获取路径中的文件名<br> Implement: <br> 1、截取最后一个“/”后面的部分<br>
     * 
     * @param path
     * @return
     * @see
     */
    public static String getFileName(String path) {
        int splitIndex = path.lastIndexOf("/");
        if (splitIndex==-1) {
            splitIndex=path.lastIndexOf("\\");
        }
        return path.substring(splitIndex + 1);
    }

    public static void copyFile(String inputFile, String outputFile)
        throws IOException {
        File sFile = new File(inputFile);
        File tFile = new File(outputFile);
        FileInputStream fis = new FileInputStream(sFile);
        FileOutputStream fos = new FileOutputStream(tFile);
        try {
            IOUtils.copy(fis, fos);
        } catch (IOException e) {
           throw e;
        }finally{
            IOUtils.closeQuietly(fis);
            IOUtils.closeQuietly(fos);
        }
    }

    /**
     * Description: <br> 1、移除后缀<br> 2、abc.tar.z-->abc.tar<br>
     * 
     * @param name
     * @return
     * @see
     */
    public static String removeSufix(String name) {
        int index = name.lastIndexOf(".");
        return name.substring(0, index);
    }

    /**
     * Description: <br> 1、搜索文件<br> Implement: <br> 1、根据名称关键字和格式后缀，搜索第一个匹配的文件<br>
     * 
     * @param files
     *            搜索范围
     * @param name
     *            关键字，以contains匹配，而不是完全匹配
     * @param format
     *            格式后缀，不带.
     * @return
     * @see
     */
    public static File search(File[] files, String name, String... format) {
        for (File file : files) {
            String _fileName = file.getName();// 解压开来的文件名
            String _form = getFileSufix(_fileName);
            if (_fileName.contains(name) && (ArrayUtils.contains(format, _form))) {
                return file;
            }
        }
        return null;
    }

    /**
     * 
     * Description: <br>
     * 1、获取文件后缀<br>
     * Implement: <br>
     * 1、 getFileSufix(file.getName());<br>
     * 
     * @param file
     * @return 
     * @see
     */
    public static String getForm(File file) {
        // TODO Auto-generated method stub
        return getFileSufix(file.getName());
    }
}
